package com.jy.datapipeline.common.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

public class RandomNumsUtil {
	private static Random random = new Random();
	/**
	 * 随机洗牌算法 
	 * 流程是从备选数组中选择一个放入目标数组中，将选取的数组从备选数组移除（放至最后，并缩小选择区域） 算法时间复杂度O(n)
	 * 
	 * @return 随机8为不重复数组
	 */
	public static String generateNumber() {
		String no = "";
		// 初始化备选数组
		int[] defaultNums = new int[10];
		for (int i = 0; i < defaultNums.length; i++) {
			defaultNums[i] = i;
		}


		int[] nums = new int[LENGTH];
		// 默认数组中可以选择的部分长度
		int canBeUsed = 10;
		// 填充目标数组
		for (int i = 0; i < nums.length; i++) {
			// 将随机选取的数字存入目标数组
			int index = random.nextInt(canBeUsed);
			nums[i] = defaultNums[index];
			// 将已用过的数字扔到备选数组最后，并减小可选区域
			swap(index, canBeUsed - 1, defaultNums);
			canBeUsed--;
		}
		if (nums.length > 0) {
			for (int i = 0; i < nums.length; i++) {
				no += nums[i];
			}
		}

		return no;
	}

	private static final int LENGTH = 7;

	private static void swap(int i, int j, int[] nums) {
		int temp = nums[i];
		nums[i] = nums[j];
		nums[j] = temp;
	}

	public static String generateNumber2() {
		String no = "";
		int num[] = new int[8];
		int c = 0;
		for (int i = 0; i < 8; i++) {
			num[i] = new Random().nextInt(10);
			c = num[i];
			for (int j = 0; j < i; j++) {
				if (num[j] == c) {
					i--;
					break;
				}
			}
		}
		if (num.length > 0) {
			for (int i = 0; i < num.length; i++) {
				no += num[i];
			}
		}
		return no;
	}
	public  static Date getDataTime(String dataUnit,int dataPeriod){

		Calendar calendar=Calendar.getInstance();
		calendar.setTime(new Date());
		if(dataUnit.equals("M")){
			calendar.add(Calendar.MONTH,-dataPeriod);
		}
		if(dataUnit.equals("D")){
			calendar.add(Calendar.DATE,-dataPeriod);
		}
		if(dataUnit.equals("H")){
			calendar.add(Calendar.HOUR,-dataPeriod);
		}
		if(dataUnit.equals("MI")){
			calendar.add(Calendar.MINUTE,-dataPeriod);
		}
		return calendar.getTime();
	}

	public static  String getDataTimeForFileName(Date date,String dataUnit){
		String dataTimeStr="";
		SimpleDateFormat sdf=null;
		if(dataUnit.equals("M")){
			sdf=new SimpleDateFormat("YYYYMM");

		}
		if(dataUnit.equals("D")){
			sdf=new SimpleDateFormat("YYYYMMdd");

		}
		if(dataUnit.equals("H") || dataUnit.equals("h")){
			sdf=new SimpleDateFormat("YYYYMMddHH");
		}
		if(dataUnit.equals("MI")){
			sdf=new SimpleDateFormat("YYYYMMddHHmm");
		}
		dataTimeStr=sdf.format(date);
		return dataTimeStr;
	}
	public static  String getTable(Date date,String pattern,String oldTableName,int funValue){
		if(pattern.equals("ADDMONTHS")){
			Calendar calendar=Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.MONTH,funValue);
			date=calendar.getTime();
			pattern="YYYYMM";
		}
		String dataTimeStr="";
		SimpleDateFormat sdf=new SimpleDateFormat(pattern);
		dataTimeStr=sdf.format(date);
//		String tableName=oldTableName.substring(0,oldTableName.lastIndexOf("_"));
		return oldTableName + "_"+dataTimeStr;
	}
	public  static  String paramsToStr(String paramsStr,Date dataTime){
		SimpleDateFormat sdf=null;
			if (paramsStr.indexOf("#system.YYYY#")>-1){
				sdf=new SimpleDateFormat("YYYY");
				paramsStr=paramsStr.replaceAll("#system.YYYY#",sdf.format(dataTime));
			}
			if (paramsStr.indexOf("#system.YYYYMM#")>-1){
				sdf=new SimpleDateFormat("YYYYMM");
				paramsStr=paramsStr.replaceAll("#system.YYYYMM#",sdf.format(dataTime));
			}
			if (paramsStr.indexOf("#system.YYYYMMDD#")>-1){
				sdf=new SimpleDateFormat("YYYYMMdd");
				paramsStr=paramsStr.replaceAll("#system.YYYYMMDD#",sdf.format(dataTime));
			}
			if (paramsStr.indexOf("#system.YYYYMMDDHH#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHH");
				paramsStr=paramsStr.replaceAll("#system.YYYYMMDDHH#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#system.YYYYMMDDHHMI#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHHmm");
				paramsStr=paramsStr.replaceAll("#system.YYYYMMDDHHMI#",sdf.format(dataTime));

			}
			if(paramsStr.indexOf("#system.YYYYMMDDHHMISS#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHHmmss");
				paramsStr=paramsStr.replaceAll("#system.YYYYMMDDHHMISS#",sdf.format(dataTime));

			}
			if(paramsStr.indexOf("#YYYY#")>-1){
				sdf=new SimpleDateFormat("YYYY");
				paramsStr=paramsStr.replaceAll("#YYYY#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#YYYYMM#")>-1){
				sdf=new SimpleDateFormat("YYYYMM");
				paramsStr=paramsStr.replaceAll("#YYYYMM#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#YYYYMMDD#")>-1){
				sdf=new SimpleDateFormat("YYYYMMdd");
				paramsStr=paramsStr.replaceAll("#YYYYMMDD#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#YYYYMMDDHH#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHH");
				paramsStr=paramsStr.replaceAll("#YYYYMMDDHH#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#YYYYMMDDHHMI#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHHmm");
				paramsStr=paramsStr.replaceAll("#YYYYMMDDHHMI#",sdf.format(dataTime));
			}
			if(paramsStr.indexOf("#YYYYMMDDHHMISS#")>-1){
				sdf=new SimpleDateFormat("YYYYMMddHHmmss");
				paramsStr=paramsStr.replaceAll("#YYYYMMDDHHMISS#",sdf.format(dataTime));
			}




//			int start=paramsStr.indexOf("#");
//			int end=paramsStr.lastIndexOf("#")+1;
//			String paramsStr2= paramsStr.substring(start,end);
//			int start2=paramsStr2.indexOf(".")+1;
//			int end2=paramsStr2.lastIndexOf("#");
//			String formatStr=paramsStr2.substring(start2,end2).replaceAll("DD","dd");
//
//			//System.out.println(formatStr);
//
//			SimpleDateFormat sdf=new SimpleDateFormat(formatStr);
//			paramsStr=paramsStr.replaceAll(paramsStr2,sdf.format(new Date()));
			//System.out.println(result);
	//	}

		return  paramsStr;
	}
	public static String getCollist(String sql){
		sql=sql.toUpperCase(Locale.ROOT);
		sql=sql.substring(sql.indexOf("SELECT")+6,sql.indexOf("FROM"));

		return sql.trim();
	}

//	public static void main(String[] args) {
//		List<String> list = new ArrayList<>();
//		for (int i = 0; i < 200; i++) {
//			// System.out.println(generateNumber());
//			String str = "INSERT INTO `antgine_nest_migu`.`market_game_code` (`expire_time`, `game_code`, `start_time`, `status`, `tenant_id`, `type`, `update_time`, `use_num`, `create_time`) VALUES ('2030-04-29 00:00:00', '"+generateNumber2()+"', '2020-04-29 00:00:00', '0', 'store001', '2', NOW(), '1', NOW());";
//			System.out.println(str);
////			list.add(generateNumber2());
//		}
////		System.out.println(list.contains("15087934"));
//	}

	public static void main(String[] args) {
//		String str="TO_CHAR(OP_DATE,'yyyymmddhh24')=#YYYY#";
//		System.out.println(RandomNumsUtil.paramsToStr(str));
		String sql="SO5.ord_busi_f_F_#system.YYYYMM#  b,\\n\"\n"
			+ "\t\t\t+ \"       SO5.ord_prod_f_F_#system.YYYYMM#  p,\\n\"\n"
			+ "\t\t\t+ \"       SO5.ord_cust_f_F_#system.YYYYMM#  c,\\n\"\n"
			+ "\t\t\t+ \"       SO5.ord_offer_f_F_#system.YYYYMM# f,\\n\"\n"
			+ "\t\t\t+ \"       SO5.ins_offer_F          oldinsOff,\\n\"\n"
			+ "\t\t\t+ \"       SO5.ins_offer_F          newinsOff";
		Date date=RandomNumsUtil.getDataTime("D",1);
	//	String result=RandomNumsUtil.paramsToStr(sql,date);
	//	String result2=RandomNumsUtil.getDataTimeForFileName(date,"D");
	String result3=RandomNumsUtil.getTable(date,"YYYYMM","ord_dsmp_confirm_log_f_202303",0);
 //		System.out.println(result);
//		System.out.println(result2);
		System.out.println(result3);
		//String result=RandomNumsUtil.paramsToStr(sql,new Date());
		//System.out.println(result);
		//		String content="- priority: 0\n" +
//				"  appName: CONNECT_MONITOR \n" +
//				"  remark: 连接测试应用\n" +
//				"  affinityType: 0 # 0 关闭亲和, 1 打开亲和 \n" +
//				"  affinityRatio: 20 # 打开亲和时的亲和百分比 0-100\n" +
//				"  affinityGroup: A # 表示databus的组\n" +
//				"  whiteList: \n" +
//				"    - 10.129.168.0/16\n" +
//				"    - 10.129.168.0/16\n" +
//				"- priority: 1\n" +
//				"  appName: CONNECT_2\n" +
//				"  remark: 连接测试应用\n" +
//				"  affinityType: 0 # 0 关闭亲和, 1 打开亲和 \n" +
//				"  affinityRatio: 20 # 打开亲和时的亲和百分比 0-100\n" +
//				"  affinityGroup: A # 表示databus的组\n" +
//				"  whiteList: \n" +
//				"    - 10.129.168.0/16\n" +
//				"    - 10.129.168.0/16";
//		String content="bpkDataServer: http://192.168.0.20:32088  #获取tablemeta & rowid的地址\n" +
//				"#bpkDataServer: http://10.8.0.30:8888\n" +
//				"bpkDbAuditServer: xxx.xx.xx.xx #全量稽核地址\n" +
//				"bpkDBLogServer: http://192.168.0.20:32373\n" +
//				"bpkMessageManageServer: http://192.168.0.20:30123/ #双写重发地址\n" +
//				"bpkSqlldr: \n" +
//				"   - http://192.168.0.20:30546/\n" +
//				"   - http://192.168.0.20:30546/";

//		for(int i=0;i<list.size();i++){
//			Map<String,Object> map=list.get(i);
//			//System.out.println(""+map.toString());
//		}
	//	Object result = yaml.load(content);
//		 JSON json=JSON.parseObject(JSON.toJSONString(result));
//		System.out.println(json.toJSONString());
//		Yaml yaml2= new Yaml();
//		JSONObject map=new JSONObject();
//		map.put("priority",2);
//		map.put("appName","test");
//		map.put("remark","连接测试应用");
//		map.put("affinityType","0");
//		map.put("affinityRatio","20");
//		map.put("affinityGroup","A");
//		JSONArray whiteList=new JSONArray();
//		whiteList.add("10.129.168.0/16");
//		whiteList.add("10.129.168.0/16");
//		map.put("whiteList",whiteList);
//
//		list.add(map);
//		System.out.println(map.toJSONString());
//
//
//		System.out.println(""+yaml2.dumpAsMap(list));
//		String yaml3Content=content+"/n -"+yaml2.dumpAsMap(map);


	}


}
